package com.wangdao.wechatmall.service.admin;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.wangdao.wechatmall.bean.bo.admin.LogParamBO;
import com.wangdao.wechatmall.bean.pojo.Log;
import com.wangdao.wechatmall.bean.pojo.LogExample;
import com.wangdao.wechatmall.bean.vo.admin.LogVO;
import com.wangdao.wechatmall.bean.vo.admin.LogDataVO;
import com.wangdao.wechatmall.mapper.LogMapper;
import com.wangdao.wechatmall.util.DateTransformUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @ClassName: LogServiceImpl
 * @Description ${DESCRIPTION}
 * @Author Xinhao Yi
 * @Date 2021/7/9  18:58
 */
@Service
public class LogServiceImpl implements LogService {

    @Autowired
    LogMapper logMapper;

    @Override
    public LogDataVO queryLogs(LogParamBO param) {
        //分页
        PageHelper.startPage(param.getPage(), param.getLimit());
        //根据username是否为null构造查询条件
        //根据sort和order去写排序
        //里面包含List<Criterion> 条件列表
        LogExample logExample = new LogExample();
        LogExample.Criteria criteria = logExample.createCriteria();
        if (param.getName() != null) {
            criteria.andAdminLike("%"+param.getName() + "%");
        }
        //一定要注意这里两者之间要有空格
        logExample.setOrderByClause(param.getSort() + " " + param.getOrder());
        //查找，拿到日志序列
        List<Log> logList = logMapper.selectByExample(logExample);

        //创建用于保存结果的 logVOs
        List<LogVO> logVOs = new ArrayList<>();

        for (Log log : logList) {
            //封装
            LogVO logVO = LogVO.ok(log.getId(),log.getAdmin(),log.getIp(),log.getType(),log.getAction(),log.getStatus(),log.getResult(),log.getComment(),log.getAddTime(),log.getUpdateTime(),log.getDeleted());
            //add进adminVoList中
            logVOs.add(logVO);
        }
        //再去拿total
        //再去拿去total
        //total可以使用countByExample，也可以使用PageHelper来获得
        //方法一：使用countByExample
        //int total = adminExample.countByExample(adminExample);

        //方法二：使用PageInfo
        //在执行查询之后可以获得分页信息,将查询结果放入PageInfo的构造方法里
        PageInfo<LogVO> pageInfo = new PageInfo<>(logVOs);
        int total = (int) pageInfo.getTotal();

        return LogDataVO.ok(total,logVOs);

    }


    @Override
    public Boolean addLog(String admin, String ip, String action, Boolean status) {
        Log log = new Log();
        //管理员名字
        log.setAdmin(admin);
        //ip地址
        log.setIp(ip);
        //如果status为true，说明操作状态为成功，我们的type为"安全操作"，即也为1
        if (status){
            log.setType(1);
        }
        else{
            log.setType(0);
        }
        //操作动作
        log.setAction(action);
        //操作状态
        log.setStatus(status);

        //result和comment先不写

        //拿当前时间
        Date date = new Date(System.currentTimeMillis());
        Date formattedDate = DateTransformUtil.dateFormat(date);

        log.setAddTime(formattedDate);
        log.setUpdateTime(formattedDate);
        log.setDeleted(false);

        //插入数据库
        int i = logMapper.insertSelective(log);

        //i=1,插入成功，返回true，反之返回false
        return i==1;

    }

}
